package servicios;

import java.util.ArrayList;
import java.util.List;
import persistencia.PersistentException;
import persistencia.ProductoDAO;
import ui.Fachada;
import dominio.Pedido;
import dominio.Producto;
import dominio.ProductoPedido;

public class ServiciosProducto extends BusinessService{

	public static Producto buscarXId(int idProducto) throws GenericBusinessException{
		try {
			return ProductoDAO.buscarPorId(idProducto);
		} catch (PersistentException e) {
			 throw new SystemException(e.getMessage());
		}
	}

	public static void guardar(Producto unProducto) throws GenericBusinessException{
		ProductoDAO cd=new ProductoDAO();
		try {
			Producto producto=ProductoDAO.buscarPorId(unProducto.getId());
			if(producto!=null){
				cd.update(unProducto);
			}else{
				cd.insert(unProducto);
			}
		
		}catch (PersistentException pex){
			 throw new SystemException(pex.getMessage());
		}
	}

	public static List<Object> listarProductos() throws GenericBusinessException{
		try {
			ProductoDAO cd=new ProductoDAO();
			List<Object> productos=cd.selectAll();
			return productos;
		} catch (PersistentException e) {
			 throw new SystemException(e.getMessage());
		}
	}

	public static void eliminar(Producto unProducto) throws GenericBusinessException{
		ProductoDAO cd=new ProductoDAO();
		try {
			cd.delete(unProducto);
		}catch(PersistentException pex){
			 throw new SystemException(pex.getMessage());
		}
	}

	public static List<Producto> buscarXNombre(String nombre) throws GenericBusinessException{
		try {
			return ProductoDAO.buscarPorNombre(nombre);
		} catch (PersistentException e) {
			 throw new SystemException(e.getMessage());
		}
	}

	public static List<Producto> getCantProdFab() throws GenericBusinessException {
		List<Pedido> pedidos=Fachada.getPedidosNoFin();
		List<Object>productos=Fachada.getListaProductos();
		List<Producto>retorno=new ArrayList<Producto>();
		for(int j=0;j<productos.size();j++){
			Producto p=(Producto) productos.get(j);
			Producto pNew=new Producto();
			pNew.setNombre(p.getNombre());
			pNew.setId(p.getId());
			for(int i=0;i<pedidos.size();i++){
				Pedido pedido=pedidos.get(i);
				for(int x=0;x<pedido.getProductosPedido().size();x++){	
					ProductoPedido pp=pedido.getProductosPedido().get(x);
					if(p.getId()==pp.getProducto().getId()){
						pNew.setTiempoProduccion(pNew.getTiempoProduccion()+pp.getCantidad());
					}
				}
			}
			if(pNew.getTiempoProduccion()>0){
				retorno.add(pNew);
			}
		}
		return retorno;
	}



}
